'''
简化汉字、传统汉字转换代码片段
'''
import json
import itertools


class ZhHantConv:
    '''
    ### 传统汉字与简化汉字互转
    基于1964年中华人民共和国简化字总表进行逐字转换
    '''

    def __init__(self):
        try:
            with open('t2s.json', 'r', encoding='utf8') as t2s:
                self.forward_dict = json.load(t2s)
        except FileNotFoundError:
            raise FileNotFoundError('未发现数据文件 t2s.json')

    def forward(self, tradition):
        '''
        传统汉字 ---> 简化汉字

        * 虽然是单射，但返回的仍然是list
        '''
        outl = list()
        for word in tradition:
            if word in self.forward_dict:
                outl.append(self.forward_dict[word])
            else:
                outl.append(word)
        outs = ''.join(outl)
        return [outs, ]

    def reverse(self, simplified):
        '''
        简化汉字 ---> 传统汉字

        * 因上述映射存在少数多射情况，返回的list是所有多射的笛卡儿积
        '''
        space = list()
        for word in simplified:
            if word in self.forward_dict.values():
                space.append(''.join([i[0] for i in filter(
                    lambda x:x[1] == word, self.forward_dict.items())]))
            else:
                space.append(word)
        return list(map(''.join, itertools.product(*space)))
